Assignment #5

Load the packages to be used and load the singer data set.

suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(forcats))
suppressPackageStartupMessages(library(knitr))
suppressPackageStartupMessages(library(gapminder))

Part 1: Factor management

Factors are how categorical data are stored. The values a factor can take on are called levels. It is important to check variable types. What you think are characters may actually be stored numerically. Let’s explore the data frame.

summary(gapminder)
        country        continent        year         lifeExp     
 Afghanistan:  12   Africa  :624   Min.   :1952   Min.   :23.60  
 Albania    :  12   Americas:300   1st Qu.:1966   1st Qu.:48.20  
 Algeria    :  12   Asia    :396   Median :1980   Median :60.71  
 Angola     :  12   Europe  :360   Mean   :1980   Mean   :59.47  
 Argentina  :  12   Oceania : 24   3rd Qu.:1993   3rd Qu.:70.85  
 Australia  :  12                  Max.   :2007   Max.   :82.60  
 (Other)    :1632                                                
      pop              gdpPercap       
 Min.   :6.001e+04   Min.   :   241.2  
 1st Qu.:2.794e+06   1st Qu.:  1202.1  
 Median :7.024e+06   Median :  3531.8  
 Mean   :2.960e+07   Mean   :  7215.3  
 3rd Qu.:1.959e+07   3rd Qu.:  9325.5  
 Max.   :1.319e+09   Max.   :113523.1  
                                       

Before beginning the factor management exercise, let’s get to know the factors in the gapminder data set.

class(gapminder$country)
[1] "factor"
factor
class(gapminder$continent)
[1] "factor"
factor
class(gapminder$year)
[1] "integer"
integer
class(gapminder$lifeExp)
[1] "numeric"
numeric
class(gapminder$pop)
[1] "integer"
integer
class(gapminder$gdpPercap)
[1] "numeric"
numeric

We see that we have two factors in this data set. Let’s see the levels for “country” and “continent” before we begin filtering the data.

nlevels(gapminder$country)
[1] 142
nlevels(gapminder$continent)
[1] 5
levels(gapminder$country)
  [1] "Afghanistan"              "Albania"                 
  [3] "Algeria"                  "Angola"                  
  [5] "Argentina"                "Australia"               
  [7] "Austria"                  "Bahrain"                 
  [9] "Bangladesh"               "Belgium"                 
 [11] "Benin"                    "Bolivia"                 
 [13] "Bosnia and Herzegovina"   "Botswana"                
 [15] "Brazil"                   "Bulgaria"                
 [17] "Burkina Faso"             "Burundi"                 
 [19] "Cambodia"                 "Cameroon"                
 [21] "Canada"                   "Central African Republic"
 [23] "Chad"                     "Chile"                   
 [25] "China"                    "Colombia"                
 [27] "Comoros"                  "Congo, Dem. Rep."        
 [29] "Congo, Rep."              "Costa Rica"              
 [31] "Cote d'Ivoire"            "Croatia"                 
 [33] "Cuba"                     "Czech Republic"          
 [35] "Denmark"                  "Djibouti"                
 [37] "Dominican Republic"       "Ecuador"                 
 [39] "Egypt"                    "El Salvador"             
 [41] "Equatorial Guinea"        "Eritrea"                 
 [43] "Ethiopia"                 "Finland"                 
 [45] "France"                   "Gabon"                   
 [47] "Gambia"                   "Germany"                 
 [49] "Ghana"                    "Greece"                  
 [51] "Guatemala"                "Guinea"                  
 [53] "Guinea-Bissau"            "Haiti"                   
 [55] "Honduras"                 "Hong Kong, China"        
 [57] "Hungary"                  "Iceland"                 
 [59] "India"                    "Indonesia"               
 [61] "Iran"                     "Iraq"                    
 [63] "Ireland"                  "Israel"                  
 [65] "Italy"                    "Jamaica"                 
 [67] "Japan"                    "Jordan"                  
 [69] "Kenya"                    "Korea, Dem. Rep."        
 [71] "Korea, Rep."              "Kuwait"                  
 [73] "Lebanon"                  "Lesotho"                 
 [75] "Liberia"                  "Libya"                   
 [77] "Madagascar"               "Malawi"                  
 [79] "Malaysia"                 "Mali"                    
 [81] "Mauritania"               "Mauritius"               
 [83] "Mexico"                   "Mongolia"                
 [85] "Montenegro"               "Morocco"                 
 [87] "Mozambique"               "Myanmar"                 
 [89] "Namibia"                  "Nepal"                   
 [91] "Netherlands"              "New Zealand"             
 [93] "Nicaragua"                "Niger"                   
 [95] "Nigeria"                  "Norway"                  
 [97] "Oman"                     "Pakistan"                
 [99] "Panama"                   "Paraguay"                
[101] "Peru"                     "Philippines"             
[103] "Poland"                   "Portugal"                
[105] "Puerto Rico"              "Reunion"                 
[107] "Romania"                  "Rwanda"                  
[109] "Sao Tome and Principe"    "Saudi Arabia"            
[111] "Senegal"                  "Serbia"                  
[113] "Sierra Leone"             "Singapore"               
[115] "Slovak Republic"          "Slovenia"                
[117] "Somalia"                  "South Africa"            
[119] "Spain"                    "Sri Lanka"               
[121] "Sudan"                    "Swaziland"               
[123] "Sweden"                   "Switzerland"             
[125] "Syria"                    "Taiwan"                  
[127] "Tanzania"                 "Thailand"                
[129] "Togo"                     "Trinidad and Tobago"     
[131] "Tunisia"                  "Turkey"                  
[133] "Uganda"                   "United Kingdom"          
[135] "United States"            "Uruguay"                 
[137] "Venezuela"                "Vietnam"                 
[139] "West Bank and Gaza"       "Yemen, Rep."             
[141] "Zambia"                   "Zimbabwe"                
Afghanistan

Albania

Algeria

Angola

Argentina

Australia

Austria

Bahrain

Bangladesh

Belgium

Benin

Bolivia

Bosnia and Herzegovina

Botswana

Brazil

Bulgaria

Burkina Faso

Burundi

Cambodia

Cameroon

Canada

Central African Republic

Chad

Chile

China

Colombia

Comoros

Congo, Dem. Rep.

Congo, Rep.

Costa Rica

Cote d'Ivoire

Croatia

Cuba

Czech Republic

Denmark

Djibouti

Dominican Republic

Ecuador

Egypt

El Salvador

Equatorial Guinea

Eritrea

Ethiopia

Finland

France

Gabon

Gambia

Germany

Ghana

Greece

Guatemala

Guinea

Guinea-Bissau

Haiti

Honduras

Hong Kong, China

Hungary

Iceland

India

Indonesia

Iran

Iraq

Ireland

Israel

Italy

Jamaica

Japan

Jordan

Kenya

Korea, Dem. Rep.

Korea, Rep.

Kuwait

Lebanon

Lesotho

Liberia

Libya

Madagascar

Malawi

Malaysia

Mali

Mauritania

Mauritius

Mexico

Mongolia

Montenegro

Morocco

Mozambique

Myanmar

Namibia

Nepal

Netherlands

New Zealand

Nicaragua

Niger

Nigeria

Norway

Oman

Pakistan

Panama

Paraguay

Peru

Philippines

Poland

Portugal

Puerto Rico

Reunion

Romania

Rwanda

Sao Tome and Principe

Saudi Arabia

Senegal

Serbia

Sierra Leone

Singapore

Slovak Republic

Slovenia

Somalia

South Africa

Spain

Sri Lanka

Sudan

Swaziland

Sweden

Switzerland

Syria

Taiwan

Tanzania

Thailand

Togo

Trinidad and Tobago

Tunisia

Turkey

Uganda

United Kingdom

United States

Uruguay

Venezuela

Vietnam

West Bank and Gaza

Yemen, Rep.

Zambia

Zimbabwe
levels(gapminder$continent)
[1] "Africa"   "Americas" "Asia"     "Europe"   "Oceania" 
Africa

Americas

Asia

Europe

Oceania

Now let’s work towards dropping “Oceoania”.

We will start by filtering the gapminder data to remove observations associated with the continent of Oceania.

No_Oceania <- gapminder %>%
  filter(continent == "Africa" | continent =="Americas"|continent == "Asia"|continent == "Europe")
No_Oceania %>% 
  sample_frac(0.1) %>% #just showing a sample of the data
  knitr:: kable(format = "markdown", justify = "centre")
country continent year lifeExp pop gdpPercap
Sri Lanka Asia 1997 70.457 18698655 2664.4773
Portugal Europe 1992 74.860 9927680 16207.2666
Afghanistan Asia 1982 39.854 12881816 978.0114
Dominican Republic Americas 1957 49.828 2923186 1544.4030
Zambia Africa 1967 47.768 3900000 1777.0773
Bosnia and Herzegovina Europe 1992 72.178 4256013 2546.7814
Oman Asia 2002 74.193 2713462 19774.8369
Angola Africa 1967 35.985 5247469 5522.7764
Canada Americas 1962 71.300 18985849 13462.4855
Hungary Europe 1962 67.960 10063000 7550.3599
Honduras Americas 1967 50.924 2500689 2538.2694
Malawi Africa 1972 41.766 4730997 584.6220
Yemen, Rep. Asia 1957 33.970 5498090 804.8305
Turkey Europe 1992 66.146 58179144 5678.3483
Puerto Rico Americas 1992 73.911 3585176 14641.5871
Korea, Dem. Rep. Asia 1997 67.727 21585105 1690.7568
Cote d’Ivoire Africa 1987 54.655 10761098 2156.9561
Botswana Africa 1952 47.622 442308 851.2411
Czech Republic Europe 1972 70.290 9862158 13108.4536
Korea, Dem. Rep. Asia 1952 50.056 8865488 1088.2778
Denmark Europe 1962 72.350 4646899 13583.3135
Togo Africa 1972 49.759 2056351 1649.6602
El Salvador Americas 1972 58.207 3790903 4520.2460
Nicaragua Americas 2002 70.836 5146848 2474.5488
Gabon Africa 1992 61.366 985739 13522.1575
Bosnia and Herzegovina Europe 1967 64.790 3585000 2172.3524
Ghana Africa 1967 48.072 8490213 1125.6972
Cameroon Africa 1972 47.049 7021028 1684.1465
Mongolia Asia 1972 53.754 1320500 1421.7420
Portugal Europe 1997 75.970 10156415 17641.0316
Sudan Africa 2002 56.369 37090298 1993.3983
Czech Republic Europe 1967 70.380 9835109 11399.4449
Ethiopia Africa 2002 50.725 67946797 530.0535
Gambia Africa 1967 35.857 439593 734.7829
Eritrea Africa 1977 44.535 2512642 505.7538
Rwanda Africa 1952 40.000 2534927 493.3239
Hong Kong, China Asia 2007 82.208 6980412 39724.9787
Bahrain Asia 1997 73.925 598561 20292.0168
Slovenia Europe 1987 72.250 1945870 18678.5349
Malaysia Asia 1977 65.256 12845381 3827.9216
Israel Asia 1977 73.060 3495918 13306.6192
Senegal Africa 1952 37.278 2755589 1450.3570
Madagascar Africa 1952 36.681 4762912 1443.0117
Zimbabwe Africa 1957 50.469 3646340 518.7643
Taiwan Asia 1982 72.160 18501390 7426.3548
Congo, Rep. Africa 1992 56.433 2409073 4016.2395
Morocco Africa 1977 55.730 18396941 2370.6200
Iraq Asia 1952 45.320 5441766 4129.7661
Mauritius Africa 2002 71.954 1200206 9021.8159
Colombia Americas 1987 67.768 30964245 4903.2191
Egypt Africa 1992 63.674 59402198 3794.7552
Peru Americas 1982 61.406 18125129 6434.5018
Botswana Africa 1972 56.024 619351 2263.6111
Colombia Americas 1977 63.837 25094412 3815.8079
Libya Africa 1962 47.808 1441863 6757.0308
Liberia Africa 1982 44.852 1956875 572.1996
Denmark Europe 2002 77.180 5374693 32166.5001
Niger Africa 1977 41.291 5682086 808.8971
Poland Europe 1997 72.750 38654957 10159.5837
Central African Republic Africa 1957 37.464 1392284 1190.8443
Greece Europe 2002 78.256 10603863 22514.2548
Sao Tome and Principe Africa 1992 62.742 125911 1428.7778
Benin Africa 1952 38.223 1738315 1062.7522
Serbia Europe 1987 71.218 9230783 15870.8785
Myanmar Asia 1967 49.379 25870271 349.0000
Rwanda Africa 1977 45.000 4657072 670.0806
Philippines Asia 1987 64.151 60017788 2189.6350
Japan Asia 1972 73.420 107188273 14778.7864
Somalia Africa 2002 45.936 7753310 882.0818
Ecuador Americas 1972 58.796 6298651 5280.9947
Togo Africa 1997 58.390 4320890 982.2869
Philippines Asia 1992 66.458 67185766 2279.3240
Namibia Africa 1952 41.725 485831 2423.7804
Sweden Europe 1967 74.160 7867931 15258.2970
Chad Africa 1987 51.051 5498955 952.3861
United Kingdom Europe 1992 76.420 57866349 22705.0925
Spain Europe 1992 77.570 39549438 18603.0645
Bosnia and Herzegovina Europe 1997 73.244 3607000 4766.3559
Saudi Arabia Asia 1992 68.768 16945857 24841.6178
Japan Asia 1962 68.730 95831757 6576.6495
Sri Lanka Asia 1972 65.042 13016733 1213.3955
Sweden Europe 1957 72.490 7363802 9911.8782
Trinidad and Tobago Americas 2007 69.819 1056608 18008.5092
Italy Europe 1977 73.480 56059245 14255.9847
Korea, Dem. Rep. Asia 1962 56.656 10917494 1621.6936
Jordan Asia 1972 56.528 1613551 2110.8563
Pakistan Asia 1982 56.158 91462088 1443.4298
Rwanda Africa 1967 44.100 3451079 510.9637
Puerto Rico Americas 1967 71.100 2648961 6929.2777
Lesotho Africa 1952 42.138 748747 298.8462
Bolivia Americas 1962 43.428 3593918 2180.9725
Somalia Africa 1982 42.955 5828892 1176.8070
Oman Asia 1952 37.578 507833 1828.2303
Benin Africa 2007 56.728 8078314 1441.2849
Mexico Americas 1992 71.455 88111030 9472.3843
Singapore Asia 1987 73.560 2794552 18861.5308
Trinidad and Tobago Americas 1972 65.900 975199 6619.5514
Norway Europe 1972 74.340 3933004 18965.0555
Lesotho Africa 1997 55.558 1982823 1186.1480
Japan Asia 1987 78.670 122091325 22375.9419
Chile Americas 2007 78.553 16284741 13171.6388
Bolivia Americas 1987 57.251 6156369 2753.6915
Haiti Americas 1977 49.923 4908554 1874.2989
Zambia Africa 1952 42.038 2672000 1147.3888
Jordan Asia 2002 71.263 5307470 3844.9172
Bosnia and Herzegovina Europe 1982 70.690 4172693 4126.6132
Iraq Asia 1967 54.459 8519282 8931.4598
Sao Tome and Principe Africa 1962 51.893 65345 1071.5511
Brazil Americas 1972 59.504 100840058 4985.7115
India Asia 1962 43.605 454000000 658.3472
Indonesia Asia 1962 42.518 99028000 849.2898
Canada Americas 1982 75.760 25201900 22898.7921
Brazil Americas 2002 71.006 179914212 8131.2128
Ireland Europe 1962 70.290 2830000 6631.5973
Burundi Africa 1957 40.533 2667518 379.5646
Indonesia Asia 1987 60.137 169276000 1748.3570
Afghanistan Asia 2007 43.828 31889923 974.5803
Montenegro Europe 1997 75.445 692651 6465.6133
Central African Republic Africa 1982 48.295 2476971 956.7530
Mongolia Asia 1962 48.251 1010280 1056.3540
Peru Americas 1957 46.263 9146100 4245.2567
Morocco Africa 1997 67.660 28529501 2982.1019
Mexico Americas 1952 50.789 30144317 3478.1255
Kenya Africa 1987 59.339 21198082 1361.9369
Montenegro Europe 1977 73.066 560073 9595.9299
Slovak Republic Europe 1977 70.450 4827803 10922.6640
Angola Africa 1987 39.906 7874230 2430.2083
Yemen, Rep. Asia 1972 39.848 7407075 1265.0470
Oman Asia 1962 43.165 628164 2924.6381
Portugal Europe 2007 78.098 10642836 20509.6478
India Asia 1977 54.208 634000000 813.3373
Iran Asia 1972 55.234 30614000 9613.8186
Guinea Africa 1977 40.762 4227026 874.6859
Sweden Europe 1992 78.160 8718867 23880.0168
Albania Europe 2007 76.423 3600523 5937.0295
Panama Americas 1957 59.201 1063506 2961.8009
Trinidad and Tobago Americas 1952 59.100 662850 3023.2719
Oman Asia 1982 62.728 1301048 12954.7910
Croatia Europe 1997 73.680 4444595 9875.6045
United States Americas 1982 74.650 232187835 25009.5591
West Bank and Gaza Asia 1972 56.532 1089572 3133.4093
Guinea Africa 1967 37.197 3451418 708.7595
Nicaragua Americas 2007 72.899 5675356 2749.3210
Netherlands Europe 1972 73.750 13329874 18794.7457
Philippines Asia 1997 68.564 75012988 2536.5349
Cuba Americas 1972 70.723 8831348 5305.4453
Vietnam Asia 2007 74.249 85262356 2441.5764
Bahrain Asia 1952 50.939 120447 9867.0848
Puerto Rico Americas 1987 74.630 3444468 12281.3419
Czech Republic Europe 2007 76.486 10228744 22833.3085
Ecuador Americas 1997 72.312 11911819 7429.4559
Brazil Americas 1952 50.917 56602560 2108.9444
Eritrea Africa 2007 58.040 4906585 641.3695
Central African Republic Africa 1987 50.485 2840009 844.8764
Paraguay Americas 1992 68.225 4483945 4196.4111
Reunion Africa 1952 52.724 257700 2718.8853
Bolivia Americas 1982 53.859 5642224 3156.5105
Slovak Republic Europe 1992 71.380 5302888 9498.4677
Honduras Americas 1952 41.912 1517453 2194.9262
Trinidad and Tobago Americas 1962 64.900 887498 4997.5240
Romania Europe 1977 69.460 21658597 9356.3972
Dominican Republic Americas 1992 68.457 7351181 3044.2142
Nepal Asia 1972 43.971 12412593 674.7881
Libya Africa 2002 72.737 5368585 9534.6775
Jordan Asia 1952 43.158 607914 1546.9078
Philippines Asia 1977 60.060 46850962 2373.2043
Myanmar Asia 1997 60.328 43247867 415.0000
Mali Africa 1962 36.936 4690372 496.1743

Let’s check how many levels there are and whether we need to remove unused factor levels.

nlevels(No_Oceania$continent)
[1] 5
levels(No_Oceania$continent)
[1] "Africa"   "Americas" "Asia"     "Europe"   "Oceania" 
Africa

Americas

Asia

Europe

Oceania

We see that there are still 5 levels. Let’s remove the unused factor levels.

Drop_Oceania <- No_Oceania %>% 
  droplevels()
nlevels(Drop_Oceania$continent)
[1] 4
levels(Drop_Oceania$continent)
[1] "Africa"   "Americas" "Asia"     "Europe"  
Africa

Americas

Asia

Europe

We do note that the factor levels are ordered alphabetically. Let’s use forcats to re-order the factor levels. We can re-order in different ways.

One way to re-order is by frequency.For example, the frequency of continents in the data.

Drop_Oceania$continent %>% 
  fct_infreq() %>% 
  levels()
[1] "Africa"   "Asia"     "Europe"   "Americas"
Africa

Asia

Europe

Americas

We can also re-order by the value of other variables in the data as life expectanc or gdp.

Drop_Oceania_1980 <- Drop_Oceania %>% 
  filter(year > 1979) %>% 
  group_by(continent, year) %>% 
  mutate(mediangdp = median(gdpPercap))

Drop_Oceania_1980
fct_reorder(Drop_Oceania_1980$continent, Drop_Oceania_1980$gdpPercap, min) %>% 
  levels() %>% head()
[1] "Africa"   "Asia"     "Americas" "Europe"  
Africa

Asia

Americas

Europe

Now we can put this into graph form.

ggplot(Drop_Oceania_1980, aes(x = year, y = Drop_Oceania_1980$mediangdp, color = fct_reorder2(continent, year, Drop_Oceania_1980$mediangdp))) +
  geom_line() +
  labs(color = "Continent")+
  xlab("Year") + ylab("Median GDP") +
  ggtitle("Median GDP 1980-2007 by Continent")

We see that reordering the levels allows the legend to be organized in the same fashion as the trendlines.

Part 2 File input and output

Let’s try saving some wrangled data into a new file.

trial<- gapminder %>%
  filter(year == "2007")

write.csv(trial, file = "assignment5_stat545")

Now let’s import this file to see if we can read it.

read.csv("assignment5_stat545")

Part 3 Visualization design

Here is an old graph from assignment 3. It looks at the weighted mean life expectancy for continents over time for the gapminder data set.

gapminder %>% 
 group_by(continent, year) %>%
 summarise(mean_lifeExp_weighted = weighted.mean(lifeExp, pop)) %>% 
 ggplot(aes(year, mean_lifeExp_weighted))+
  geom_point(aes(colour = continent))

What can be improved? 1) We can add a trend line so we can estimate what is happening between years. 2) We can change the axis titles and add a graph title. 3) We can re-order the factor levels so the legend is presented in logical order. 4) We can change the scale of the axes to show every 5 years of life. 5) We can change the graphs theme.

gapminder %>% 
 group_by(continent, year) %>%
 summarise(mean_lifeExp_weighted = weighted.mean(lifeExp, pop)) %>% 
 ggplot(aes(year, mean_lifeExp_weighted, color = fct_reorder2(continent, year, mean_lifeExp_weighted)))+
  geom_point(aes(colour = continent))+
  geom_line(aes(colour = continent))+
  scale_y_continuous(breaks=5*(1:17))+
  xlab("Year")+
    ylab("Weighted Mean Life Expectancy")+
  labs(color = "Continent")+
  ggtitle("Weighted Mean Life Expectancy vs. Time (Years)")+
  theme_minimal()

**Let’s try a different graph and also use plotly to make it more interactive.*Now we can make an interactive plot using plotly.**

Here is the original graph:

gapminder %>%
 group_by(year) %>% 
 mutate(median = median(lifeExp)) %>%
 ggplot(aes(year, lifeExp)) +
 geom_jitter(aes(colour = (lifeExp < median)), alpha = 0.5)+
  facet_wrap(~ continent)

Here is the cleaner version.

gapminder %>%
 group_by(year) %>% 
 mutate(median = median(lifeExp)) %>%
 ggplot(aes(year, lifeExp)) +
 geom_jitter(aes(colour = (lifeExp < median)), alpha = 0.5)+
  facet_wrap(~ continent,nrow = 5, ncol = 1)+
  scale_y_continuous(breaks=10*(1:9))+ #change the scale
  xlab("Year")+ #change the titles
  ylab("Life Expectancy")+
  ggtitle("Country life expectancy over time")+
  scale_colour_discrete(name  ="CountrylLife expectancy > worldwide median?")+ #make the legend clearer
  theme(legend.position="right") #select legend position

Now, let’s make this into a plotly graph.

#First, let's save the above graph into "plotly1"
plotly1 <- gapminder %>%
 group_by(year) %>% 
 mutate(median = median(lifeExp)) %>%
 ggplot(aes(year, lifeExp)) +
 geom_jitter(aes(colour = (lifeExp < median)), alpha = 0.5)+
  facet_wrap(~ continent,nrow = 5, ncol = 1)+
  scale_y_continuous(breaks=10*(1:9))+ 
  xlab("Year")+
  ylab("Life Expectancy")+
  ggtitle("Country life expectancy over time")+
  scale_colour_discrete(name  ="CountrylLife expectancy > worldwide median?")+
  theme(legend.position="right") 

#Now open plotly package.
library(plotly)

Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':

    last_plot
The following object is masked from 'package:stats':

    filter
The following object is masked from 'package:graphics':

    layout
#GEnerating plotly graph.
ggplotly(plotly1)

**We do notice that plotly has some nice features. However, visualization is not as good. The legend is cut off. We can see if moving the legend elsewhere will improve this visualization.

plotly2 <- gapminder %>%
 group_by(year) %>% 
 mutate(median = median(lifeExp)) %>%
 ggplot(aes(year, lifeExp)) +
 geom_jitter(aes(colour = (lifeExp < median)), alpha = 0.5)+
  facet_wrap(~ continent,nrow = 5, ncol = 1)+
  scale_y_continuous(breaks=10*(1:9))+ 
  xlab("Year")+
  ylab("Life Expectancy")+
  ggtitle("Country life expectancy over time")+
  scale_colour_discrete(name  ="CountrylLife expectancy > worldwide median?")+
  theme(legend.position="bottom") 

#GEnerating plotly graph.
ggplotly(plotly2)

Hmmmm. It appears plotly dose not have all the aesthetic options that ggplot does. Anyways, let’s save this as a local html file.

ggplotly(plotly1) %>% 
  htmlwidgets::saveWidget("plotly1")

**

LS0tDQp0aXRsZTogImh3MDUtbnRqam1hayINCmF1dGhvcjogIk5pY29sZSBNYWsiDQpkYXRlOiAiMTUvMTAvMjAxOCINCm91dHB1dDoNCiAgICBnaXRodWJfZG9jdW1lbnQ6DQogICAgICBodG1sX25vdGVib29rDQotLS0NCg0KIyBBc3NpZ25tZW50ICM1DQoNCg0KKipMb2FkIHRoZSBwYWNrYWdlcyB0byBiZSB1c2VkIGFuZCBsb2FkIHRoZSBzaW5nZXIgZGF0YSBzZXQuKioNCg0KYGBge3J9DQoNCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KGRwbHlyKSkNCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KGdncGxvdDIpKQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxpYnJhcnkodGlkeXZlcnNlKSkNCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KGZvcmNhdHMpKQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxpYnJhcnkoa25pdHIpKQ0Kc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxpYnJhcnkoZ2FwbWluZGVyKSkNCmBgYA0KDQojIyBQYXJ0IDE6IEZhY3RvciBtYW5hZ2VtZW50DQoNCioqRmFjdG9ycyBhcmUgaG93IGNhdGVnb3JpY2FsIGRhdGEgYXJlIHN0b3JlZC4gVGhlIHZhbHVlcyBhIGZhY3RvciBjYW4gdGFrZSBvbiBhcmUgY2FsbGVkIGxldmVscy4gSXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHZhcmlhYmxlIHR5cGVzLiBXaGF0IHlvdSB0aGluayBhcmUgY2hhcmFjdGVycyBtYXkgYWN0dWFsbHkgYmUgc3RvcmVkIG51bWVyaWNhbGx5LiBMZXQncyBleHBsb3JlIHRoZSBkYXRhIGZyYW1lLioqDQoNCmBgYHtyfQ0Kc3VtbWFyeShnYXBtaW5kZXIpDQpgYGANCg0KKipCZWZvcmUgYmVnaW5uaW5nIHRoZSBmYWN0b3IgbWFuYWdlbWVudCBleGVyY2lzZSwgbGV0J3MgZ2V0IHRvIGtub3cgdGhlIGZhY3RvcnMgaW4gdGhlIGdhcG1pbmRlciBkYXRhIHNldC4qKg0KDQpgYGB7cn0NCmNsYXNzKGdhcG1pbmRlciRjb3VudHJ5KQ0KY2xhc3MoZ2FwbWluZGVyJGNvbnRpbmVudCkNCmNsYXNzKGdhcG1pbmRlciR5ZWFyKQ0KY2xhc3MoZ2FwbWluZGVyJGxpZmVFeHApDQpjbGFzcyhnYXBtaW5kZXIkcG9wKQ0KY2xhc3MoZ2FwbWluZGVyJGdkcFBlcmNhcCkNCg0KYGBgDQoNCioqV2Ugc2VlIHRoYXQgd2UgaGF2ZSB0d28gZmFjdG9ycyBpbiB0aGlzIGRhdGEgc2V0LiBMZXQncyBzZWUgdGhlIGxldmVscyBmb3IgImNvdW50cnkiIGFuZCAiY29udGluZW50IiBiZWZvcmUgd2UgYmVnaW4gZmlsdGVyaW5nIHRoZSBkYXRhLioqDQoNCmBgYHtyfQ0KbmxldmVscyhnYXBtaW5kZXIkY291bnRyeSkNCm5sZXZlbHMoZ2FwbWluZGVyJGNvbnRpbmVudCkNCg0KbGV2ZWxzKGdhcG1pbmRlciRjb3VudHJ5KQ0KbGV2ZWxzKGdhcG1pbmRlciRjb250aW5lbnQpDQpgYGANCg0KDQoqKk5vdyBsZXQncyB3b3JrIHRvd2FyZHMgZHJvcHBpbmcgIk9jZW9hbmlhIi4qKg0KDQoqKldlIHdpbGwgc3RhcnQgYnkgZmlsdGVyaW5nIHRoZSBnYXBtaW5kZXIgZGF0YSB0byByZW1vdmUgb2JzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGluZW50IG9mIE9jZWFuaWEuKioNCg0KYGBge3J9DQpOb19PY2VhbmlhIDwtIGdhcG1pbmRlciAlPiUNCiAgZmlsdGVyKGNvbnRpbmVudCA9PSAiQWZyaWNhIiB8IGNvbnRpbmVudCA9PSJBbWVyaWNhcyJ8Y29udGluZW50ID09ICJBc2lhInxjb250aW5lbnQgPT0gIkV1cm9wZSIpDQpOb19PY2VhbmlhICU+JSANCiAgc2FtcGxlX2ZyYWMoMC4xKSAlPiUgI2p1c3Qgc2hvd2luZyBhIHNhbXBsZSBvZiB0aGUgZGF0YQ0KICBrbml0cjo6IGthYmxlKGZvcm1hdCA9ICJtYXJrZG93biIsIGp1c3RpZnkgPSAiY2VudHJlIikNCmBgYA0KDQoqKkxldCdzIGNoZWNrIGhvdyBtYW55IGxldmVscyB0aGVyZSBhcmUgYW5kIHdoZXRoZXIgd2UgbmVlZCB0byByZW1vdmUgdW51c2VkIGZhY3RvciBsZXZlbHMuKioNCmBgYHtyfQ0KbmxldmVscyhOb19PY2VhbmlhJGNvbnRpbmVudCkNCmxldmVscyhOb19PY2VhbmlhJGNvbnRpbmVudCkNCmBgYA0KDQoqKldlIHNlZSB0aGF0IHRoZXJlIGFyZSBzdGlsbCA1IGxldmVscy4gTGV0J3MgcmVtb3ZlIHRoZSB1bnVzZWQgZmFjdG9yIGxldmVscy4qKg0KDQpgYGB7cn0NCkRyb3BfT2NlYW5pYSA8LSBOb19PY2VhbmlhICU+JSANCiAgZHJvcGxldmVscygpDQpubGV2ZWxzKERyb3BfT2NlYW5pYSRjb250aW5lbnQpDQpsZXZlbHMoRHJvcF9PY2VhbmlhJGNvbnRpbmVudCkNCmBgYA0KDQoqKldlIGRvIG5vdGUgdGhhdCB0aGUgZmFjdG9yIGxldmVscyBhcmUgb3JkZXJlZCBhbHBoYWJldGljYWxseS4gTGV0J3MgdXNlIGZvcmNhdHMgdG8gcmUtb3JkZXIgdGhlIGZhY3RvciBsZXZlbHMuIFdlIGNhbiByZS1vcmRlciBpbiBkaWZmZXJlbnQgd2F5cy4qKg0KDQoqKk9uZSB3YXkgdG8gcmUtb3JkZXIgaXMgYnkgZnJlcXVlbmN5LkZvciBleGFtcGxlLCB0aGUgZnJlcXVlbmN5IG9mIGNvbnRpbmVudHMgaW4gdGhlIGRhdGEuKioNCg0KYGBge3J9DQpEcm9wX09jZWFuaWEkY29udGluZW50ICU+JSANCiAgZmN0X2luZnJlcSgpICU+JSANCiAgbGV2ZWxzKCkNCg0KYGBgDQoNCioqV2UgY2FuIGFsc28gcmUtb3JkZXIgYnkgdGhlIHZhbHVlIG9mIG90aGVyIHZhcmlhYmxlcyBpbiB0aGUgZGF0YSBhcyBsaWZlIGV4cGVjdGFuYyBvciBnZHAuKioNCg0KYGBge3J9DQpEcm9wX09jZWFuaWFfMTk4MCA8LSBEcm9wX09jZWFuaWEgJT4lIA0KICBmaWx0ZXIoeWVhciA+IDE5NzkpICU+JSANCiAgZ3JvdXBfYnkoY29udGluZW50LCB5ZWFyKSAlPiUgDQogIG11dGF0ZShtZWRpYW5nZHAgPSBtZWRpYW4oZ2RwUGVyY2FwKSkNCg0KRHJvcF9PY2VhbmlhXzE5ODANCg0KDQpmY3RfcmVvcmRlcihEcm9wX09jZWFuaWFfMTk4MCRjb250aW5lbnQsIERyb3BfT2NlYW5pYV8xOTgwJGdkcFBlcmNhcCwgbWluKSAlPiUgDQogIGxldmVscygpICU+JSBoZWFkKCkNCmBgYA0KDQoqKk5vdyB3ZSBjYW4gcHV0IHRoaXMgaW50byBncmFwaCBmb3JtLioqDQoNCmBgYHtyfQ0KZ2dwbG90KERyb3BfT2NlYW5pYV8xOTgwLCBhZXMoeCA9IHllYXIsIHkgPSBEcm9wX09jZWFuaWFfMTk4MCRtZWRpYW5nZHAsIGNvbG9yID0gZmN0X3Jlb3JkZXIyKGNvbnRpbmVudCwgeWVhciwgRHJvcF9PY2VhbmlhXzE5ODAkbWVkaWFuZ2RwKSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBsYWJzKGNvbG9yID0gIkNvbnRpbmVudCIpKw0KICB4bGFiKCJZZWFyIikgKyB5bGFiKCJNZWRpYW4gR0RQIikgKw0KICBnZ3RpdGxlKCJNZWRpYW4gR0RQIDE5ODAtMjAwNyBieSBDb250aW5lbnQiKQ0KYGBgDQoNCioqV2Ugc2VlIHRoYXQgcmVvcmRlcmluZyB0aGUgbGV2ZWxzIGFsbG93cyB0aGUgbGVnZW5kIHRvIGJlIG9yZ2FuaXplZCBpbiB0aGUgc2FtZSBmYXNoaW9uIGFzIHRoZSB0cmVuZGxpbmVzLioqDQoNCg0KIyMgUGFydCAyIEZpbGUgaW5wdXQgYW5kIG91dHB1dA0KDQoqKkxldCdzIHRyeSBzYXZpbmcgc29tZSB3cmFuZ2xlZCBkYXRhIGludG8gYSBuZXcgZmlsZS4qKg0KDQpgYGB7cn0NCnRyaWFsPC0gZ2FwbWluZGVyICU+JQ0KICBmaWx0ZXIoeWVhciA9PSAiMjAwNyIpDQoNCndyaXRlLmNzdih0cmlhbCwgZmlsZSA9ICJhc3NpZ25tZW50NV9zdGF0NTQ1IikNCmBgYA0KDQoqKk5vdyBsZXQncyBpbXBvcnQgdGhpcyBmaWxlIHRvIHNlZSBpZiB3ZSBjYW4gcmVhZCBpdC4qKg0KDQpgYGB7cn0NCnJlYWQuY3N2KCJhc3NpZ25tZW50NV9zdGF0NTQ1IikNCmBgYA0KDQoNCg0KIyMgUGFydCAzIFZpc3VhbGl6YXRpb24gZGVzaWduDQoNCg0KKipIZXJlIGlzIGFuIG9sZCBncmFwaCBmcm9tIGFzc2lnbm1lbnQgMy4gSXQgbG9va3MgYXQgdGhlIHdlaWdodGVkIG1lYW4gbGlmZSBleHBlY3RhbmN5IGZvciBjb250aW5lbnRzIG92ZXIgdGltZSBmb3IgdGhlIGdhcG1pbmRlciBkYXRhIHNldC4qKg0KDQpgYGB7cn0NCmdhcG1pbmRlciAlPiUgDQogZ3JvdXBfYnkoY29udGluZW50LCB5ZWFyKSAlPiUNCiBzdW1tYXJpc2UobWVhbl9saWZlRXhwX3dlaWdodGVkID0gd2VpZ2h0ZWQubWVhbihsaWZlRXhwLCBwb3ApKSAlPiUgDQogZ2dwbG90KGFlcyh5ZWFyLCBtZWFuX2xpZmVFeHBfd2VpZ2h0ZWQpKSsNCiAgZ2VvbV9wb2ludChhZXMoY29sb3VyID0gY29udGluZW50KSkNCmBgYA0KDQoqKldoYXQgY2FuIGJlIGltcHJvdmVkPyAxKSBXZSBjYW4gYWRkIGEgdHJlbmQgbGluZSBzbyB3ZSBjYW4gZXN0aW1hdGUgd2hhdCBpcyBoYXBwZW5pbmcgYmV0d2VlbiB5ZWFycy4gMikgV2UgY2FuIGNoYW5nZSB0aGUgYXhpcyB0aXRsZXMgYW5kIGFkZCBhIGdyYXBoIHRpdGxlLiAzKSBXZSBjYW4gcmUtb3JkZXIgdGhlIGZhY3RvciBsZXZlbHMgc28gdGhlIGxlZ2VuZCBpcyBwcmVzZW50ZWQgaW4gbG9naWNhbCBvcmRlci4gNCkgV2UgY2FuIGNoYW5nZSB0aGUgc2NhbGUgb2YgdGhlIGF4ZXMgdG8gc2hvdyBldmVyeSA1IHllYXJzIG9mIGxpZmUuIDUpIFdlIGNhbiBjaGFuZ2UgdGhlIGdyYXBocyB0aGVtZS4qKg0KDQpgYGB7cn0NCmdhcG1pbmRlciAlPiUgDQogZ3JvdXBfYnkoY29udGluZW50LCB5ZWFyKSAlPiUNCiBzdW1tYXJpc2UobWVhbl9saWZlRXhwX3dlaWdodGVkID0gd2VpZ2h0ZWQubWVhbihsaWZlRXhwLCBwb3ApKSAlPiUgDQogZ2dwbG90KGFlcyh5ZWFyLCBtZWFuX2xpZmVFeHBfd2VpZ2h0ZWQsIGNvbG9yID0gZmN0X3Jlb3JkZXIyKGNvbnRpbmVudCwgeWVhciwgbWVhbl9saWZlRXhwX3dlaWdodGVkKSkpKw0KICBnZW9tX3BvaW50KGFlcyhjb2xvdXIgPSBjb250aW5lbnQpKSsNCiAgZ2VvbV9saW5lKGFlcyhjb2xvdXIgPSBjb250aW5lbnQpKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz01KigxOjE3KSkrDQogIHhsYWIoIlllYXIiKSsNCiAgICB5bGFiKCJXZWlnaHRlZCBNZWFuIExpZmUgRXhwZWN0YW5jeSIpKw0KICBsYWJzKGNvbG9yID0gIkNvbnRpbmVudCIpKw0KICBnZ3RpdGxlKCJXZWlnaHRlZCBNZWFuIExpZmUgRXhwZWN0YW5jeSB2cy4gVGltZSAoWWVhcnMpIikrDQogIHRoZW1lX21pbmltYWwoKQ0KICANCmBgYA0KDQoNCioqTGV0J3MgdHJ5IGEgZGlmZmVyZW50IGdyYXBoIGFuZCBhbHNvIHVzZSBgcGxvdGx5YCB0byBtYWtlIGl0IG1vcmUgaW50ZXJhY3RpdmUuKk5vdyB3ZSBjYW4gbWFrZSBhbiBpbnRlcmFjdGl2ZSBwbG90IHVzaW5nIGBwbG90bHlgLioqDQoNCioqSGVyZSBpcyB0aGUgb3JpZ2luYWwgZ3JhcGg6KioNCg0KYGBge3J9DQpnYXBtaW5kZXIgJT4lDQogZ3JvdXBfYnkoeWVhcikgJT4lIA0KIG11dGF0ZShtZWRpYW4gPSBtZWRpYW4obGlmZUV4cCkpICU+JQ0KIGdncGxvdChhZXMoeWVhciwgbGlmZUV4cCkpICsNCiBnZW9tX2ppdHRlcihhZXMoY29sb3VyID0gKGxpZmVFeHAgPCBtZWRpYW4pKSwgYWxwaGEgPSAwLjUpKw0KICBmYWNldF93cmFwKH4gY29udGluZW50KQ0KYGBgDQoNCioqSGVyZSBpcyB0aGUgY2xlYW5lciB2ZXJzaW9uLioqDQoNCmBgYHtyfQ0KZ2FwbWluZGVyICU+JQ0KIGdyb3VwX2J5KHllYXIpICU+JSANCiBtdXRhdGUobWVkaWFuID0gbWVkaWFuKGxpZmVFeHApKSAlPiUNCiBnZ3Bsb3QoYWVzKHllYXIsIGxpZmVFeHApKSArDQogZ2VvbV9qaXR0ZXIoYWVzKGNvbG91ciA9IChsaWZlRXhwIDwgbWVkaWFuKSksIGFscGhhID0gMC41KSsNCiAgZmFjZXRfd3JhcCh+IGNvbnRpbmVudCxucm93ID0gNSwgbmNvbCA9IDEpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPTEwKigxOjkpKSsgI2NoYW5nZSB0aGUgc2NhbGUNCiAgeGxhYigiWWVhciIpKyAjY2hhbmdlIHRoZSB0aXRsZXMNCiAgeWxhYigiTGlmZSBFeHBlY3RhbmN5IikrDQogIGdndGl0bGUoIkNvdW50cnkgbGlmZSBleHBlY3RhbmN5IG92ZXIgdGltZSIpKw0KICBzY2FsZV9jb2xvdXJfZGlzY3JldGUobmFtZSAgPSJDb3VudHJ5bExpZmUgZXhwZWN0YW5jeSA+IHdvcmxkd2lkZSBtZWRpYW4/IikrICNtYWtlIHRoZSBsZWdlbmQgY2xlYXJlcg0KICB0aGVtZShsZWdlbmQucG9zaXRpb249InJpZ2h0IikgI3NlbGVjdCBsZWdlbmQgcG9zaXRpb24NCmBgYA0KDQoNCioqTm93LCBsZXQncyBtYWtlIHRoaXMgaW50byBhIGBwbG90bHlgIGdyYXBoLioqDQoNCmBgYHtyfQ0KI0ZpcnN0LCBsZXQncyBzYXZlIHRoZSBhYm92ZSBncmFwaCBpbnRvICJwbG90bHkxIg0KcGxvdGx5MSA8LSBnYXBtaW5kZXIgJT4lDQogZ3JvdXBfYnkoeWVhcikgJT4lIA0KIG11dGF0ZShtZWRpYW4gPSBtZWRpYW4obGlmZUV4cCkpICU+JQ0KIGdncGxvdChhZXMoeWVhciwgbGlmZUV4cCkpICsNCiBnZW9tX2ppdHRlcihhZXMoY29sb3VyID0gKGxpZmVFeHAgPCBtZWRpYW4pKSwgYWxwaGEgPSAwLjUpKw0KICBmYWNldF93cmFwKH4gY29udGluZW50LG5yb3cgPSA1LCBuY29sID0gMSkrDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3M9MTAqKDE6OSkpKyANCiAgeGxhYigiWWVhciIpKw0KICB5bGFiKCJMaWZlIEV4cGVjdGFuY3kiKSsNCiAgZ2d0aXRsZSgiQ291bnRyeSBsaWZlIGV4cGVjdGFuY3kgb3ZlciB0aW1lIikrDQogIHNjYWxlX2NvbG91cl9kaXNjcmV0ZShuYW1lICA9IkNvdW50cnlsTGlmZSBleHBlY3RhbmN5ID4gd29ybGR3aWRlIG1lZGlhbj8iKSsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJyaWdodCIpIA0KDQojTm93IG9wZW4gcGxvdGx5IHBhY2thZ2UuDQpsaWJyYXJ5KHBsb3RseSkNCg0KI0dFbmVyYXRpbmcgcGxvdGx5IGdyYXBoLg0KZ2dwbG90bHkocGxvdGx5MSkNCg0KYGBgDQoNCioqV2UgZG8gbm90aWNlIHRoYXQgYHBsb3RseWAgaGFzIHNvbWUgbmljZSBmZWF0dXJlcy4gSG93ZXZlciwgdmlzdWFsaXphdGlvbiBpcyBub3QgYXMgZ29vZC4gVGhlIGxlZ2VuZCBpcyBjdXQgb2ZmLiBXZSBjYW4gc2VlIGlmIG1vdmluZyB0aGUgbGVnZW5kIGVsc2V3aGVyZSB3aWxsIGltcHJvdmUgdGhpcyB2aXN1YWxpemF0aW9uLg0KDQpgYGB7cn0NCnBsb3RseTIgPC0gZ2FwbWluZGVyICU+JQ0KIGdyb3VwX2J5KHllYXIpICU+JSANCiBtdXRhdGUobWVkaWFuID0gbWVkaWFuKGxpZmVFeHApKSAlPiUNCiBnZ3Bsb3QoYWVzKHllYXIsIGxpZmVFeHApKSArDQogZ2VvbV9qaXR0ZXIoYWVzKGNvbG91ciA9IChsaWZlRXhwIDwgbWVkaWFuKSksIGFscGhhID0gMC41KSsNCiAgZmFjZXRfd3JhcCh+IGNvbnRpbmVudCxucm93ID0gNSwgbmNvbCA9IDEpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPTEwKigxOjkpKSsgDQogIHhsYWIoIlllYXIiKSsNCiAgeWxhYigiTGlmZSBFeHBlY3RhbmN5IikrDQogIGdndGl0bGUoIkNvdW50cnkgbGlmZSBleHBlY3RhbmN5IG92ZXIgdGltZSIpKw0KICBzY2FsZV9jb2xvdXJfZGlzY3JldGUobmFtZSAgPSJDb3VudHJ5bExpZmUgZXhwZWN0YW5jeSA+IHdvcmxkd2lkZSBtZWRpYW4/IikrDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgDQoNCiNHRW5lcmF0aW5nIHBsb3RseSBncmFwaC4NCmdncGxvdGx5KHBsb3RseTIpDQpgYGANCg0KKipIbW1tbS4gSXQgYXBwZWFycyBgcGxvdGx5YCBkb3NlIG5vdCBoYXZlIGFsbCB0aGUgYWVzdGhldGljIG9wdGlvbnMgdGhhdCBnZ3Bsb3QgZG9lcy4gQW55d2F5cywgbGV0J3Mgc2F2ZSB0aGlzIGFzIGEgbG9jYWwgaHRtbCBmaWxlLioqDQpgYGB7cn0NCmdncGxvdGx5KHBsb3RseTEpICU+JSANCiAgaHRtbHdpZGdldHM6OnNhdmVXaWRnZXQoInBsb3RseTEiKQ0KYGBgDQoNCioq